home *** CD-ROM | disk | FTP | other *** search
-
- #include <stdio.h>
- #include <string.h>
- #include <glib.h>
- #include <strlib.h>
- #include "land.h"
-
- /* #include "..\lib.h" */
-
- void colbox(int x, int y, int col)
- {
- line(x, y, x+15, y+15, PSET, col, 2, 0xffff);
- line(x, y, x+15, y+15, PSET, col0, 1, 0xffff);
- }
-
- void psmsgcls()
- {
- line(80+1, 290+21, 560-1, 360-1, PSET, col7, 2, 0xffff);
- }
-
- void pseudemsg2(char *msg1, char *msg2)
- {
- line( 80+1,290+21, 560-1, 360-1, PSET, col7, 2, 0xffff);
- msgset(96, 315, msg1, col0);
- msgset(96, 335, msg2, col0);
- }
-
- void pseudemsg(int com, int sw)
- {
- char hmsg1[80], hmsg2[80];
- int col;
-
- hmsg1[0] = '\0'; hmsg2[0] = '\0';
-
- if (com == 1) {
- strcpy(hmsg1, "色数を設定してください。(2~16色)");
- }
-
- if (com == 2 || com == 3) {
- strcpy(hmsg1, "右側のウィンドウから色を選んでください。");
- }
-
- if (com == 8 || com == 9 || com == 10) {
- strcpy(hmsg1, "色、レベル、作業領域を設定してください。");
- strcpy(hmsg2, "設定は ○、□、数字の部分をそれぞれ指定してください。");
- }
-
- if (com == 12) {
- strcpy(hmsg1, "メイン・メニューにもどります。");
- }
-
- if (sw == 0) col = col7;
- else col = col0;
-
- msgset(96, 315, hmsg1, col);
- msgset(96, 335, hmsg2, col);
- }
-
- void levelset(int coln, int th[17][2], int sw)
- {
- int i, col, cx, cy;
- char swk[10];
-
- sprintf(swk, "< %3d", th[0][0]);
- symbol(118, 257, swk, 1,1, col10, 0 ,PSET);
-
- for (i = 0; i < coln; i++) {
- if (i < coln-1) col = col0;
- else col = col10;
- sprintf(swk, "< %3d", th[i+1][0]);
- if (i < 8) {
- if (sw == 1) colbox(100, 245-i*20, i);
- cx = 118; cy = 237-i*20;
- } else {
- if (sw == 1) colbox(180, 245+160-i*20, i);
- cx = 198; cy = 237+160-i*20;
- }
- line(cx-1, cy-1, cx+45, cy+9, PSET, col7, 2, 0xffff);
- symbol(cx, cy, swk, 1,1, col, 0 ,PSET);
- }
- }
-
-
- int colnset(int coln, int th[17][2])
- {
- int mosx = 270, mosy = 100, coln2, i;
- double wa;
-
- if (calc( &mosx, &mosy, &wa) == 0) coln2 = coln;
- else coln2 = wa;
- if (coln2 < 2) coln2 = 2;
- if (coln2 >16) coln2 = 16;
- if (coln != coln2) {
- for (i = 0; i < coln2; i++) {
- th[i][0] = 256*i/coln2; th[i][1] = 256*(i+1)/coln2-1;
- }
- th[coln2][0] = 256; th[coln2][1] = 0;
- line(90+1, 63+21, 250-1, 268-1, PSET, col7, 2, 0xffff);
- levelset(coln2, th, 1);
- }
- return(coln2);
- }
-
- void colchg(int cx, int cy, int *cl)
- {
- unsigned ddadr[2];
- unsigned char page;
- char buf[11279]; /* (110*205+7)/8*4 */
- int x, y;
- int mx, my, i, j;
- int cx2, cy2;
-
- x = 270; y = 80;
- page = 0;
- BSETDATAADR(ddadr, buf);
- GDS_getBlock(ddadr[0], ddadr[1], page, x, y, x+109, y+204);
-
- helpbox( x, y, x+100, y+190, "色の種類");
- for (i = 0; i < 8; i++) {
- colbox(x+20, y+195-23-i*20, i);
- colbox(x+60, y+195-23-i*20, i+8);
- }
- while(1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- for (i = 0; i < 8; i++) {
- cx2 = x+20; cy2 = y+195-23-i*20; j = 0;
- if (xychk16(mx, my, cx2, cy2) == 1) break;
- cx2 = x+60; j = 8;
- if (xychk16(mx, my, cx2, cy2) == 1) break;
- cx2 = 0;
- }
- if (cx2 != 0) {
- line(cx2-1, cy2-1, cx2+16, cy2+16, PSET, col14, 1, 0xffff);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk16(mx, my, cx2, cy2) == 1) {
- *cl = i + j;
- colbox(cx, cy, *cl);
- break;
- }
- line(cx2-1, cy2-1, cx2+16, cy2+16, PSET, col7, 1, 0xffff);
- }
- }
- GDS_putBlock(ddadr[0], ddadr[1], page, x, y, x+109, y+204, PSET);
- return;
- }
-
- void levelchg(int cx, int cy, int coln, int th[17][2], int leveln)
- {
- int mosx = 260, mosy = 100, maxlv, minlv;
- char ws2[80];
- double wa = 0;
- int wi = 0, i;
-
- ws2[0] = '\0';
- while(1) {
- if (coln == 2) {
- maxlv = 255;
- minlv = 1;
- break;
- }
- if (leveln == 0) {
- maxlv = th[coln-1][0] - (coln-2);
- minlv = 1;
- break;
- }
- if (leveln == coln -2 ) {
- maxlv = 255;
- minlv = th[1][0] + (coln-2);
- break;
- }
- maxlv = th[leveln+2][0]-1;
- minlv = th[leveln][0]+1;
- break;
- }
- psmsgcls();
- sprintf(ws2, "レベル設定範囲 [%d~%d]", minlv, maxlv);
- pseudemsg2("レベルを設定してください。", ws2);
-
- if (calc( &mosx, &mosy, &wa) == 1) {
- wi = wa;
- if (wi < minlv) wi = minlv;
- if (wi > maxlv) wi = maxlv;
- while(1) {
- if (coln == 2) {
- th[0][1] = wi - 1;
- th[1][0] = wi;
- break;
- }
- if (leveln == 0) {
- th[1][0] = wi;
- th[0][1] = th[1][0] - 1;
- for (i = 2; i < coln-1; i++) {
- th[i][0] = (th[coln-1][0]-th[1][0])*(i-1)/(coln-2)+th[1][0];
- th[i-1][1] = th[i][0] - 1;
- }
- th[coln-2][1] = th[coln-1][0]-1;
- break;
- }
- if (leveln == coln -2 ) {
- th[coln-1][0] = wi;
- for (i = 2; i < coln-1; i++) {
- th[i][0] = (th[coln-1][0]-th[1][0])*(i-1)/(coln-2)+th[1][0];
- th[i-1][1] = th[i][0] - 1;
- }
- th[coln-2][1] = th[coln-1][0]-1;
- break;
- }
- th[leveln+1][0] = wi;
- th[leveln][1] = th[leveln+1][0] - 1;
- break;
- }
- levelset(coln, th, 0);
- /* th level print for debug *
- Locate(0,0); Color(2);
- for (i = 0; i <= coln; i++) {
- printf("col= %d-%d \n", th[i][0], th[i][1]);
- }
- Color(7);
- * end for denug */
- }
- psmsgcls();
- return;
- }
-
- int chgbox( int mx, int my, int *bx2, int *by2, int *xsiz2, int *ysiz2)
- {
- int boxcom = -1;
- int x, y, xsiz, ysiz, wx, wy, x1, y1, x2, y2;
- char buf1x[323], buf2x[323], buf1y[203], buf2y[203]; /* (640*1+7)/8*4, (400*1+7)/8*4 */
- unsigned ddadr1x[2], ddadr2x[2], ddadr1y[2], ddadr2y[2];
- unsigned char page = 0;
-
- x = *bx2; y = *by2; xsiz = *xsiz2; ysiz = *ysiz2;
-
- if (xychk( mx, my, x+xsiz-4, y+ysiz-4, x+xsiz+2, y+ysiz+2) == 1) { /* 枠変更 */
- MOS_horizon(x+5, 511);
- MOS_vertical(y+5, 399);
- boxcom = 0;
- }
- if (xychk( mx, my, x+xsiz-4, y-3, x+xsiz+2, y+3) == 1) { /* 枠変更 */
- MOS_horizon(x+5, 511);
- MOS_vertical(0, y+ysiz-5);
- boxcom = 1;
- }
- if (xychk( mx, my, x-3, y-3, x+3, y+3) == 1) { /* 枠変更 */
- MOS_horizon(0, x+xsiz-5);
- MOS_vertical(0, y+ysiz-5);
- boxcom = 2;
- }
- if (xychk( mx, my, x-3, y+ysiz-4, x+3, y+ysiz+2) == 1) { /* 枠変更 */
- MOS_horizon(0, x+xsiz-5);
- MOS_vertical(y+5, 399);
- boxcom = 3;
- }
- if (xychk( mx, my, x+xsiz-4, y+3, x+xsiz+2, y+ysiz-4) == 1) { /* 枠変更 */
- MOS_horizon(x+5, 511);
- MOS_vertical(my, my);
- boxcom = 10;
- }
- if (xychk( mx, my, x+3, y-3, x+xsiz-4, y+3) == 1) { /* 枠変更 */
- MOS_horizon(mx, mx);
- MOS_vertical(0, y+ysiz-5);
- boxcom = 11;
- }
- if (xychk( mx, my, x-3, y+3, x+3, y+ysiz-4) == 1) { /* 枠変更 */
- MOS_horizon(0, x+xsiz-5);
- MOS_vertical(my, my);
- boxcom = 12;
- }
- if (xychk( mx, my, x+3, y+ysiz-4, x+xsiz-4, y+ysiz+2) == 1) { /* 枠変更 */
- MOS_horizon(mx, mx);
- MOS_vertical(y+5, 399);
- boxcom = 13;
- }
- if (boxcom == -1) return(0);
- mcu2();
- /* ボックスサイズ変更 */
- BSETDATAADR(ddadr1x, buf1x);
- BSETDATAADR(ddadr2x, buf2x);
- BSETDATAADR(ddadr1y, buf1y);
- BSETDATAADR(ddadr2y, buf2y);
-
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2);
- line(x, y, x+xsiz-1, y+ysiz-1, PSET, col8, 1, 0xffff);
-
- x1 = x; y1 = y; x2 = x + xsiz - 1; y2 = y + ysiz - 1;
- while ((MOS_rdpos(&wx, &wy) & 0x01) == 1) {
- if (wx != mx || wy != my) {
- mx = wx; my = wy;
- switch (boxcom) {
- case 0 : x2 = wx; y2 = wy; break;
- case 1 : x2 = wx; y1 = wy; break;
- case 2 : x1 = wx; y1 = wy; break;
- case 3 : x1 = wx; y2 = wy; break;
- case 10 : x2 = wx; break;
- case 11 : y1 = wy; break;
- case 12 : x1 = wx; break;
- case 13 : y2 = wy; break;
- default : break;
- }
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2, PSET);
- x = x1; y = y1; xsiz = x2 - x1 + 1; ysiz = y2 - y1 + 1;
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2);
- line(x, y, x+xsiz-1, y+ysiz-1, PSET, col8, 1, 0xffff);
- }
- }
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, x, y, x+xsiz-1, y, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, x, y+ysiz-1, x+xsiz-1, y+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, x, y+1, x, y+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, x+xsiz-1, y+1, x+xsiz-1, y+ysiz-2, PSET);
- /* ボックスサイズ変更終了 */
- MOS_horizon(0, 639);
- MOS_vertical(0, 399);
- mcu1();
- *bx2 = x; *by2 = y; *xsiz2 = xsiz; *ysiz2 = ysiz;
- return(1);
- }
-
- void areacalc( int typ, int warea, int lin, int pixel, int coln, int cl[], int th[][2])
- {
- char buf1x[323], buf2x[323], buf1y[203], buf2y[203]; /* (640*1+7)/8*4, (400*1+7)/8*4 */
- unsigned ddadr1x[2], ddadr2x[2], ddadr1y[2], ddadr2y[2];
- unsigned char page, sPage, dPage;
- unsigned ddadr[2];
- char buf[18054]; /* (95*380+7)/8*4 */
- int mx, my, mosx=350, mosy=100;
- int mex=512, mey= 25; /* sub menu */
- int siz=2, ret;
- char wstr[20];
- double wa;
- int bx=128, by=100, bx2, by2, xsiz=256, ysiz=200, xsiz2, ysiz2;
- int i, j, kx, ky, m, n, com = 1;
- int cx, cy, col;
- unsigned char colcvt[256];
- long colcnt[16];
- unsigned char huge *WPTR;
-
- BSETDATAADR(ddadr, buf); /* address set */
-
- BSETDATAADR(ddadr1x, buf1x);
- BSETDATAADR(ddadr2x, buf2x);
- BSETDATAADR(ddadr1y, buf1y);
- BSETDATAADR(ddadr2y, buf2y);
-
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
-
- while(1) {
- if (com == 1) {
- com = 0;
- page = 0;
- GDS_getBlock(ddadr[0], ddadr[1], page, mex, mey, mex+127, mey+171);
- if (typ == 0) helpbox( mex, mey, mex+120, mey+160, "面積計算");
- else helpbox( mex, mey, mex+120, mey+160, "ヒストグラム\x095\x05c示");
- /* 表 */
- msgset( mex+5, mey+30, "枠内ドラッグで", col0);
- msgset( mex+5, mey+50, "位置移動", col0);
- msgset( mex+5, mey+70, "枠ドラッグで", col0);
- msgset( mex+5, mey+90, "大きさ変更", col0);
- line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
- sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(mex+16, mey+110, wstr, col0);
- sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(mex+16, mey+120, wstr, col0);
- recogmsg(mex+30, mey+135, col0);
- mousemsg( mex+70, mey+135, "終了", col0);
- }
-
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) { com = 0; continue; }
-
- bx2 = bx; by2 = by; xsiz2 = xsiz; ysiz2 = ysiz;
- if (chgbox( mx, my, &bx2, &by2, &xsiz2, &ysiz2) != 0) { /* ボックスの大きさ変更 */
- com = 0;
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
- bx = bx2; by = by2; xsiz = xsiz2; ysiz = ysiz2;
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- mcu1();
- line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
- sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(mex+16, mey+110, wstr, col0);
- sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(mex+16, mey+120, wstr, col0);
- continue;
- }
- if (xychk( mx, my, bx, by, bx+xsiz-1, by+ysiz-1) == 1) { /* ボックス移動 */
- com = 0;
- MOS_horizon(mx-bx, 511-((bx+xsiz-1)-mx));
- MOS_vertical(my-by, 399-((by+ysiz-1)-my));
- mcu3();
- bx2 = bx; by2 = by;
- movbox(&bx2, &by2, xsiz, ysiz, mx-bx, my-by);
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
- bx = bx2; by = by2;
- GDS_getBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by);
- GDS_getBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1);
- GDS_getBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2);
- GDS_getBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2);
- line(bx, by, bx+xsiz-1, by+ysiz-1, PSET, col15, 1, 0xffff);
- MOS_horizon(0, 639);
- MOS_vertical(0, 399);
- mcu1();
- line(mex+1, mey+110, mex+119, mey+130, PSET, col7, 2, 0xffff);
- sprintf(wstr, "L%3d-P%3d/", lin+by/ypixel, pixel+bx/xpixel);
- msgset2(mex+16, mey+110, wstr, col0);
- sprintf(wstr, "L%3d-P%3d", lin+(by+ysiz-1)/ypixel, pixel+(bx+xsiz-1)/xpixel);
- msgset2(mex+16, mey+120, wstr, col0);
- continue;
- }
- if (xychk(mx, my, mex+70, mey+135, mex+70+32, mey+135+16) == 1) {
- com = 0;
- mousemsg( mex+70, mey+135, "終了", -1);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, mex+70, mey+135, mex+70+32, mey+135+16) == 1) {
- break;
- }
- mousemsg( mex+70, mey+135, "終了", col0);
- continue;
- }
- if (recogin2( mx, my, mex+30, mey+135, 0) == 1) { /* 実行 */
- if(typ == 0) {
- com = 1;
- /* clear color counter */
- for (i = 0; i < 16; i++) colcnt[i] = 0;
- /* color table set */
- for (i = 0; i < coln; i++) {
- for (j = th[i][0]; j <= th[i][1]; j++) colcvt[j] = i;
- }
- /* color count */
- for (j = by; j < by+ysiz; j++) {
- /* printf("%d\n", j); デバッグ用 */
- WPTR = WAREA + 512L * j + bx;
- /* ここにバグがある?。
- for (i = bx; i < bx+xsiz; i++) colcnt[colcvt[(unsigned char huge)*(WPTR++)]]++;
- */
- for (i = bx; i < bx+xsiz; i++) colcnt[colcvt[*WPTR]]++;
- WPTR++;
-
- }
- /* メニューの消去 */
- page = 0;
- GDS_putBlock(ddadr[0], ddadr[1], page, mex, mey, mex+127, mey+171, PSET);
-
- GDS_getBlock(ddadr[0], ddadr[1], page, mex, mey, mex+94, mey+379);
- helpbox( mex, mey, mex+88, mey+355, "面積計算");
-
- sprintf(wstr, "<%3d", th[0][0]);
- symbol(mex+23, mey+20-5+18*(coln+1), wstr, 1,1, col10, 0 ,PSET);
- for (i = 0; i < coln; i++) {
- colbox(mex+5, mey+20+18*(coln-i), cl[i]);
- if (i < coln-1) col = col0;
- else col = col10;
- cx = mex+23; cy = mey+20-5+18*(coln-i);
- sprintf(wstr, "<%3d", th[i+1][0]);
- symbol(cx, cy, wstr, 1,1, col, 0 ,PSET);
- sprintf(wstr, "%6ld", colcnt[i]);
- symbol(mex+31, mey+20+4+18*(coln-i), wstr, 1, 1, col13, 0, PSET);
- }
- recogmsg(mex+30, mey+335, col0);
-
- while (1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0); /* 確認 */
- if (xychk(mx, my, mex+30, mey+335, mex+70+32, mey+335+16) == 1) {
- recogmsg(mex+30, mey+335, -1);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, mex+30, mey+335, mex+30+32, mey+335+16) == 1) {
- GDS_putBlock(ddadr[0], ddadr[1], page, mex, mey, mex+94, mey+379, PSET);
- break;
- }
- recogmsg(mex+30, mey+335, col0);
- continue;
- }
- }
- } else {
- /* ヒストグラム表示 */
- histgram2( warea, lin+by/ypixel, pixel+bx/xpixel, ysiz/ypixel, xsiz/xpixel);
- recogmsg( mex+30, mey+135, col0);
- continue;
- }
- }
- /* 裏画面表示 */
- backexp(mx, my, 630, 0, 639, 20);
- continue;
- }
- /*
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- */
-
- /* ボックスの消去 */
- GDS_putBlock(ddadr1x[0], ddadr1x[1], page, bx, by, bx+xsiz-1, by, PSET);
- GDS_putBlock(ddadr2x[0], ddadr2x[1], page, bx, by+ysiz-1, bx+xsiz-1, by+ysiz-1, PSET);
- GDS_putBlock(ddadr1y[0], ddadr1y[1], page, bx, by+1, bx, by+ysiz-2, PSET);
- GDS_putBlock(ddadr2y[0], ddadr2y[1], page, bx+xsiz-1, by+1, bx+xsiz-1, by+ysiz-2, PSET);
- /* メニューの消去 */
- GDS_putBlock(ddadr[0], ddadr[1], page, mex, mey, mex+127, mey+171, PSET);
- }
-
-
- /* return( command ) */
- int pseude2menu( int com)
- {
- unsigned ddadr[2];
- unsigned char page;
- char buf[30175]; /* (397*152+7)/8*4 */
- int x, y, x2, y2;
- int mx=0, my=0, time=0;
-
- x = 60; y = 65;
- page = 0;
- BSETDATAADR(ddadr, buf);
- GDS_getBlock(ddadr[0], ddadr[1], page, x, y, x+396, y+151);
-
- helpbox( x, y, x+390, y+120, "シュードカラー・メニュー");
- msgset(x, y+30, " ○ ポイント位置\x095\x05c示", col0);
- /* 表 */
- msgset(x, y+50, " ○ 拡大\x095\x05c示", col0);
- /* 表 */
- msgset(x, y+70, " ○ 三次元\x095\x05c示", col0);
- /* 表 */
- msgset(x+190, y+30, " ○ 色別面積計算", col0);
- msgset(x+190, y+50, " ○ ヒストグラム\x095\x05c示", col0);
- /* 表 */
- msgset(x+190, y+70, " ○ 終 了", col0);
- execmsg(x+350, y+95, col0);
-
- while (1) {
- if (time != 0) while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- else time = 1;
- if (xychk(mx, my, x+350, y+95, x+350+33, y+95+18) == 1) {
- execmsg(x+350, y+95, -1);
- while((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, x+350, y+95, x+350+33, y+95+18) == 0) {
- execmsg(x+350, y+95, col0);
- continue;
- } else {
- break;
- }
- }
- if (com == 1) { msgset(x+16, y+30, "●", col7); msgset(x+16, y+30, "○", col0); }
- if (com == 2) { msgset(x+16, y+50, "●", col7); msgset(x+16, y+50, "○", col0); }
- if (com == 3) { msgset(x+16, y+70, "●", col7); msgset(x+16, y+70, "○", col0); }
- if (com == 4) { msgset(x+16+190, y+30, "●", col7); msgset(x+16+190, y+30, "○", col0); }
- if (com == 5) { msgset(x+16+190, y+50, "●", col7); msgset(x+16+190, y+50, "○", col0); }
- if (com == -1) { msgset(x+16+190, y+70, "●", col7); msgset(x+16+190, y+70, "○", col0); }
- line(x+1, y+95, x+345, y+112, PSET, col7, 2, 0xffff);
- if(xychk16(mx, my, x+16, y+30) == 1) com = 1;
- if(xychk16(mx, my, x+16, y+50) == 1) com = 2;
- if(xychk16(mx, my, x+16, y+70) == 1) com = 3;
- if(xychk16(mx, my, x+16+190, y+30) == 1) com = 4;
- if(xychk16(mx, my, x+16+190, y+50) == 1) com = 5;
- if(xychk16(mx, my, x+16+190, y+70) == 1) com = -1;
- if (com == 1) {
- msgset(x+16, y+30, "●", col0);
- msgset(x+16, y+95, "カー\x083\x05cル位置\x095\x05c示をします。[5個所まで]", col0);
- /* ソ 表 */
- }
- if (com == 2) {
- msgset(x+16, y+50, "●", col0);
- msgset(x+16, y+95, "画像の拡大\x095\x05c示をします。[2~64倍まで]", col0);
- } /* 表 */
- if (com == 3) {
- msgset(x+16, y+70, "●", col0);
- msgset(x+16, y+95, "三次元画像\x095\x05c示をします。", col0);
- } /* 表 */
- if (com == 4) {
- msgset(x+16+190, y+30, "●", col0);
- msgset(x+16, y+95, "枠内の色別面積計算をします。", col0);
- }
- if (com == 5) {
- msgset(x+16+190, y+50, "●", col0);
- msgset(x+16, y+95, "枠内のヒストグラム\x095\x05c示をします。", col0);
- } /* 表 */
- if (com == -1) {
- msgset(x+16+190, y+70, "●", col0);
- msgset(x+16, y+95, "ディザカラー\x095\x05c示を終了します", col0);
- /* 表 */
- }
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- }
- GDS_putBlock(ddadr[0], ddadr[1], page, x, y, x+396, y+151, PSET);
- return(com);
- }
-
- void pseudeerr(int warea)
- {
- char msg[80];
-
- helpbox( 80, 150, 560, 220, "エラー");
- if ( warea != 0 ) sprintf( msg, "作業領域 %d にエラーが発生しました。", warea);
- else sprintf( msg, "作業領域にエラーが発生しました。");
- msgset(96, 175, msg, col10);
- msgset(96, 195, "確認ボタンを押してください。", col10);
- recogin( 435, 195, 0);
- return;
- }
-
- void pseude2(int warea, int coln, int cl[], int th[][2])
- {
- int lin, pixel;
- int mx, my, mosx=400, mosy=100, com;
- int i, j, x, y, col, cx, cy, colcvt[256];
- unsigned char page;
- char swk[80], swk2[80];
- char wname[64];
- FILE *fp;
- unsigned char headblk[2][512], wblk[512];
- size_t bsize, bn;
- unsigned gn, goffset;
- unsigned char sPage, dPage;
- unsigned char huge *WPTR;
-
- sprintf(wname, "%s\\warea%1d.lnd", workdir, warea);
-
- page = 1;
- GDS_displayPage(page);
- gout();
- page = 0;
- GDS_writePage(page);
- gout();
-
- Cls;
- helpbox2( 512, 0, 639, 399, "シュードカラー");
-
- sprintf(swk, "<%3d", th[0][0]);
- symbol(538, 336, swk, 1,1, col10, 0 ,PSET);
-
- for (i = 0; i < coln; i++) {
- if (i < coln-1) col = col0;
- else col = col10;
- sprintf(swk, "<%3d", th[i+1][0]);
- if (i < 8) {
- colbox(520, 324-i*20, cl[i]);
- cx = 538; cy = 316-i*20;
- } else {
- colbox( 580, 324+160-i*20, cl[i]);
- cx = 598; cy = 316+160-i*20;
- }
- symbol(cx, cy, swk, 1,1, col, 0 ,PSET);
- }
-
- /* work area open */
- if ((fp = fopen(wname, "rb")) == NULL) {
- page = 0;
- GDS_displayPage(page);
- gout();
- pseudeerr(warea);
- return;
- }
- bsize = 512; bn = 1;
- if (fread( headblk[0], bsize, bn, fp) != bn) {
- page = 0; GDS_displayPage(page); gout();
- fclose(fp); pseudeerr(warea); return;
- }
- if (fread( headblk[1], bsize, bn, fp) != bn) {
- page = 0; GDS_displayPage(page); gout();
- fclose(fp); pseudeerr(warea); return;
- }
-
- sprintf(swk, "作業領域 %d", warea);
- msgset(516, 25, swk, col0);
- strmid(swk, headblk[0], 17, 15);
- msgset2(516, 45, swk, col0);
- msgset2(516, 55, "L 1-P 1/", col0);
- msgset2(516, 65, "L400-P511", col0);
- strmid(swk, headblk[0], 33, 15); /* band num */
- msgset2(516, 75, swk, col0);
- strmid(swk, headblk[1], 89, 7); /* date */
- msgset2(516, 85, swk, col0);
- strmid(swk, headblk[1], 97, 9); /* wrs seen sentor n */
- msgset2(516, 95, swk, col0);
- strmid(swk, headblk[1], 106, 7); /* -s */
- msgset2(516+16, 105, swk, col0);
- strmid(swk, headblk[1], 114, 9); /* wrs 表示 */
- msgset2(516, 115, swk, col0);
- /* strmid(swk, headblk[1], 176, 13); nasda landsat */
- /* msgset2(516, 115, swk, col0); */
- strmid(swk, headblk[1], 189, 15); /* seen id */
- msgset2(516, 125, swk, col0);
- strmid(swk, headblk[1], 209, 8); /* sensor name */
- msgset2(516, 135, swk, col0);
- msgset2(516, 145, "---------------", col0);
-
- GDS_displayPage(page);
- gout();
-
- for (i = 0; i < coln; i++) {
- for (j = th[i][0]; j <= th[i][1]; j++) colcvt[j] = cl[i];
- }
-
- /* 表示 */
- GDS_drawMode(&GDS_data, PSET);
- WPTR = WAREA;
- bsize = 512; bn = 1;
- for (y = 0; y < 400; y++) {
- if (fread( wblk, bsize, bn, fp) != bn) {
- fclose(fp); pseudeerr(warea); return;
- }
- for (i = 0; i < 512; i+=32) {
- for (x = i; x < i+32; x++) {
- GDS_pointColor(&GDS_data, colcvt[ (*WPTR) = wblk[x] ]);
- WPTR++;
- GDS_pointFirst(&GDS_data, x, y);
- /* pset(x, y, colcvt[ wblk[x] ], PSET); */
- }
- GDS_outputGraph(&GDS_data, &gn, &goffset);
- GDS_resetData(&GDS_data);
- }
- }
-
- fclose(fp);
-
- /* initial set */
- xpixel = 1; ypixel = 1; /* global */
- lin = 1; pixel = 1;
- /* 裏画面表示 */
- sPage = 0; dPage = 1;
- GDS_copyBlock(sPage, 512, 0, 639, 399, dPage, 512, 0, PSET);
-
- com = 1;
- dith2exec(526, 355, col0);
- calcu(600, 355, 0);
- while (1) {
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (calchk(mx, my, 600, 355, &mosx, &mosy) == 1) continue;
- if (xychk(mx, my, 526, 355, 526+32, 355+16) == 1) {
- dith2exec(526, 355, -1);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, 526, 355, 526+32, 355+16) == 1) {
- if ((com = pseude2menu( com)) == -1) break;
- if (com == 1) {
- pointset( lin, pixel);
- }
- if (com == 2) {
- sizechg( lin, pixel);
- }
-
- if (com == 3) {
- gr3d( lin, pixel);
- }
- if (com == 4 || com == 5) {
- areacalc( com-4, warea, lin, pixel, coln, cl, th);
- /* 裏画面修復(復帰) */
- page = 1;
- GDS_writePage(page);
- gout();
- Cls;
- /* 裏画面転送 */
- sPage = 0; dPage = 1;
- GDS_copyBlock(sPage, 512, 0, 639, 399, dPage, 512, 0, PSET);
- /* メニュー消去 */
- line( 520, 350, 638, 379, PSET, col7, 2, 0xffff);
- page = 0;
- GDS_writePage(page);
- gout();
- }
- }
- dith2exec(526, 355, col0);
- continue;
- }
- }
-
- /* tst prog
- fclose(fp1); fclose(fp2); fclose(fp3);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- */
- page = 1;
- GDS_writePage(page);
- gout();
- Cls;
- page = 0;
- GDS_writePage(page);
- gout();
- return;
- }
-
- void pseude()
- {
- int bcl[16];
- int exec, com, com2, com3;
- int mx, my, mosx=400, mosy=100;
- unsigned char page;
- int i, j, cx, cy;
- int coln, cl[16], th[17][2];
- double wa = 0;
-
- coln = 16;
- for (i = 0; i <= 16; i++) {
- cl[i] = i;
- th[i][0] = 16*i; th[i][1] = 16*i+15;
- }
- com = com2 = 8;
- com3 = 0;
-
- start:
- page = 1;
- GDS_displayPage(page);
- gout();
- page = 0;
- GDS_writePage(page);
- gout();
- Cls;
- mttl();
- bcl[0] = col1;
- paint(1,30, 1, col7, 1, bcl);
- menubox( 80, 40, 560, 280, "シュードカラー画像\x095\x05c示条件設定");
- /* 表 */
- helpbox( 80,290, 560, 360, "メッセージ");
- /* line(90, 103, 250, 278, PSET, col1, 1, 0xffff); */
- helpbox( 90, 63, 250, 268, "色、レベル設定");
- levelset(coln, th, 1);
- msgset(320, 70, " ○ 色数変更", col0);
- msgset(320, 90, " ○ 作業領域1", col0);
- msgset(320,110, " ○ 作業領域2", col0);
- msgset(320,130, " ○ 作業領域3", col0);
- msgset(320,170, " ○ 終 了", col0);
- execmsg(480, 210, col0);
- calcu(600, 30, 0);
- wabot(600, 60, 0);
-
- GDS_displayPage(page);
- gout();
- locate(0,0,COFF);
- MOS_disp(0);
- exec = 0;
-
- while(1) {
- start2:
- if (com == 8) msgset(336, 90, "●", col0);
- if (com == 9) msgset(336,110, "●", col0);
- if (com ==10) msgset(336,130, "●", col0);
- if (com ==12) msgset(336,170, "●", col0);
- pseudemsg(com, 1);
-
- if (exec == 1) {
- if (8 <= com && com <= 10) {
- pseude2(com-7, coln, cl, th);
- goto start;
- }
- if (com == 12) { return; }
- }
- while ((MOS_rdpos(&mx, &my) & 0x01) == 0);
- if (calchk(mx, my, 600, 30, &mosx, &mosy) == 1) continue;
- if (wabotchk(mx, my, 600, 60) == 1) continue;
-
- for (i = 0; i < coln; i++) {
- if (i<8) {
- cx = 100; cy = 245-i*20;
- if (xychk16(mx, my,cx, cy) == 1) {
- com3 = 2; break;
- }
- cx = 118; cy = 237-i*20;
- if (xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1) {
- com3 = 3; break;
- }
- } else {
- cx = 180; cy = 245+160-i*20;
- if (xychk16(mx, my, cx, cy) == 1) {
- com3 = 2; break;
- }
- cx = 198; cy = 237+160-i*20;
- if ((xychk(mx, my, cx-1, cy-1, cx+45, cy+9) == 1) && (i < coln-1)) {
- com3 = 3; break;
- }
- }
- }
- if (com3 == 2) {
- line(cx-1, cy-1, cx+16, cy+16, PSET, col14, 1, 0xffff);
- colchg(cx, cy, &cl[i]);
- line(cx-1, cy-1, cx+16, cy+16, PSET, col7, 1, 0xffff);
- com3 = 0;
- continue;
- }
- if (com3 == 3) {
- line(cx-1, cy-1, cx+45, cy+9, PSET, col14, 1, 0xffff);
- levelchg(cx, cy, coln, th, i);
- line(cx-1, cy-1, cx+45, cy+9, PSET, col7, 1, 0xffff);
- com3 = 0;
- continue;
- }
- if (xychk16(mx, my, 336, 70) == 1) {
- msgset( 336, 70, "●", col0);
- helpcls( 80,290, 560, 360);
- pseudemsg(1, 1);
- coln = colnset(coln, th);
- pseudemsg(1, 0);
- msgset( 336, 70, "●", col7); msgset( 336, 70, "○", col0);
- continue;
- }
- if (xychk16(mx, my,336, 90) == 1) com = 8;
- if (xychk16(mx, my,336,110) == 1) com = 9;
- if (xychk16(mx, my,336,130) == 1) com =10;
- if (xychk16(mx, my,336,170) == 1) com =12;
- if (xychk(mx, my,480,210, 480+33, 210+18) == 1) {
- execmsg(480, 210, -1);
- while ((MOS_rdpos(&mx, &my) & 0x01) == 1);
- if (xychk(mx, my, 480, 210, 480+33, 210+18) == 1) {
- exec = 1;
- continue;
- } else {
- exec = 0;
- execmsg(480, 210, col0);
- continue;
- }
- }
- if (com != com2) {
- if (com2 == 8) { msgset(336, 90, "●", col7); msgset(336, 90, "○", col0); }
- if (com2 == 9) { msgset(336,110, "●", col7); msgset(336,110, "○", col0); }
- if (com2 ==10) { msgset(336,130, "●", col7); msgset(336,130, "○", col0); }
- if (com2 ==12) { msgset(336,170, "●", col7); msgset(336,170, "○", col0); }
- psmsgcls();
- com2 = com;
- }
- }
- }
-